package site.isscloud.project.mapper;

import org.apache.ibatis.annotations.Param;
import site.isscloud.project.domain.PjStatsLocationTemperatureMinute;
import site.isscloud.project.dto.LocationTemperature;
import site.isscloud.project.dto.TemperatureTrendDTO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 空间位置温度分钟统计Mapper接口
 */
public interface PjStatsLocationTemperatureMinuteMapper {

    int insertPjStatsLocationTemperatureMinute(PjStatsLocationTemperatureMinute pjStatsLocationTemperatureMinute);

    int selectCountByStatTime(LocalDateTime statTime);

    List<PjStatsLocationTemperatureMinute> selectByTimeRange(@Param("startTime") LocalDateTime startTime,
                                                             @Param("endTime") LocalDateTime endTime);

    List<PjStatsLocationTemperatureMinute> selectByStatTime(@Param("statTime") LocalDateTime statTime);

    /**
     * 根据电梯ID和时间范围查询温度趋势数据（按小时）
     */
    List<TemperatureTrendDTO> selectTrendByLcIdAndTimeRange(
            @Param("lcId") String lcId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    /**
     * 根据电梯ID查询最新的实时温度数据
     */
    List<LocationTemperature> selectLatestTemperatureByLcId(
            @Param("lcId") String lcId);

    /**
     * 根据电梯代码获取各楼层最新温度数据
     */
    List<Map<String, Object>> selectLatestFloorTemperatureByElevatorCode(@Param("elevatorCode") String elevatorCode);

    /**
     * 根据电梯代码和时间范围查询趋势数据
     */
    List<Map<String, Object>> selectTrendByElevatorCodeAndTimeRange(
            @Param("elevatorCode") String elevatorCode,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime,
            @Param("tableSuffix") String tableSuffix);

    /**
     * 查询最新的温度统计数据
     */
    List<Map<String, Object>> selectLatestTemperatureStats();

    /**
     * 根据位置编码查询温度统计数据
     */
    List<Map<String, Object>> selectTemperatureStatsByLocationCode(String lcCode);

    /**
     * 根据电梯编码查询最新的分钟级温度数据
     * 获取每个楼层的最新一条温度记录
     */
    List<Map<String, Object>> selectRecentTemperatureByElevator(@Param("elevatorCode") String elevatorCode);

    /**
     * 获取最新统计时间的所有位置温度数据
     */
    List<PjStatsLocationTemperatureMinute> selectAllLatestTemperatureStats();

    /**
     * 获取指定设备通道的最新位置温度数据
     */
    List<PjStatsLocationTemperatureMinute> selectLatestTemperatureStatsByDeviceChannel(
            @Param("deviceNo") String deviceNo,
            @Param("channelNo") Integer channelNo);

    /**
     * 批量获取多个设备通道的最新位置温度数据
     * @param deviceChannelMaps List<Map>格式，每个Map包含deviceNo和channelNo
     */
    List<PjStatsLocationTemperatureMinute> selectLatestTemperatureStatsByDeviceChannels(
            @Param("list") List<Map<String, Object>> deviceChannelMaps);
}